#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
int tickets = 500;
// 静态初始化 互斥量  不需要在额外调用 pthread_mutex_init 和 pthread_mutex_destory 函数了
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;

/*
    改版代码：
        - 什么时候 加锁
        - 什么时候 解锁
        - 根据主要针对的核心业务来考虑
*/
void *buytickets(void *arg)
{
    char *a = (char *)arg;
    while (1)
    {
        // 加锁
        pthread_mutex_lock(&mutex);
        if (tickets > 0)
        {
            // tickets--;
            usleep(1000);
            // printf("%d号线程，买到了第%d张票\n", *((int *)arg), tickets--);
            printf("%s--线程，买到了第%d张票\n", a, tickets--);
            pthread_mutex_unlock(&mutex);
        }
        else
        {
            pthread_mutex_unlock(&mutex);
            break;
        }
    }

    pthread_exit(NULL);
}
int main()
{

    pthread_t tid[5];
    char *names[] = {"张三", "李四", "王五", "赵六", "马七"};
    for (int i = 0; i < 5; i++)
    {
        pthread_create(&tid[i], NULL, buytickets, names[i]);
        // pthread_create(&tid[i], NULL, buytickets, &i);//存在问题
    }

    // 等待线程，回收
    for (int i = 0; i < 5; i++)
    {
        pthread_join(tid[i], NULL);
    }
    exit(0);
}